// Loesung_von_Aufgabe_3.7_7_zwei_Sonnen

Gravi[] Planeten = new Gravi[6]; // Array für Himmelskörper mit dem Namen Planet aus der Klasse Gravi
void setup()
{
  size(600, 600);
  // Nun legen wir die ganz konkreten Werte für unsere Himmelkörper fest
  // Reihenfolge der Werte: Ortsvektor r, Geschwindigkeitsvektor v, Masse m, Durchmesser der Himmelskörper D, Farbe c
  Planeten[0] = new Gravi(new PVector(300, 300), new PVector (0, 0), 2000, 30, new PVector (255, 255, 0)); // Sonne 1
  Planeten[1] = new Gravi(new PVector(300, 240), new PVector (5, 0), 2, 10, new PVector (0, 0, 255)); // blauer Planet
  Planeten[2] = new Gravi(new PVector(300, 200), new PVector (4, 0), 2, 10, new PVector (0, 255, 0)); // grüner Planet
  Planeten[3] = new Gravi(new PVector(300, 150), new PVector  (3, 0), 3, 15, new PVector (255, 0, 0)); // roter Planet
  Planeten[4] = new Gravi(new PVector(300, 100), new PVector  (3, 0), 4, 15, new PVector (200, 200, 200)); // grauer Planet
  Planeten[5] = new Gravi(new PVector(100, 500), new PVector (0, -1), 2000, 30, new PVector (255, 255, 0)); // Sonne 2
}

void draw()
{
  background(255);
  for (int i = 0; i < Planeten.length; i++)
  {
    for (int j = 0; j < Planeten.length; j++)
    {
      if (i == j)
        continue; /* Für i == j würde der Himmelskörper mit sich selber wechselwirken. Mit continue vermeiden wir dies. 
       Die Operation i == j wird einfach ausgelassen. In der Referenz steht: When run inside of a for or while, 
       it skips the remainder of the block and starts the next iteration. */

      Planeten[i].force(Planeten[j], 1); // Die Gravitationskonstante G wurde hier gleich 1 gesetzt
    }
  }

  for (int i = 0; i < Planeten.length; i++)
  {
    Planeten[i].move(0.1); // Für kleine t-Werte (hier t = 0.1) erhält man eine stabile Simulation.
    Planeten[i].display();
  }
}